<HTML>
<BODY>
<PRE>
<!-- Manpage converted by man2html 3.0.1 -->

<B><A HREF="SETBUF.html">SETBUF(3)</A></B>	       FreeBSD Library Functions Manual 	     <B><A HREF="SETBUF.html">SETBUF(3)</A></B>


</PRE>
<H2>NAME</H2><PRE>
     <B>setbuf</B>, <B>setbuffer</B>, <B>setlinebuf</B>, <B>setvbuf</B> - stream buffering operations


</PRE>
<H2>SYNOPSIS</H2><PRE>
     <B>#include</B> <B>&lt;stdio.h&gt;</B>

     <I>void</I>
     <B>setbuf</B>(<I>FILE</I> <I>*stream</I>, <I>char</I> <I>*buf</I>)

     <I>void</I>
     <B>setbuffer</B>(<I>FILE</I> <I>*stream</I>, <I>char</I> <I>*buf</I>, <I>int</I> <I>size</I>)

     <I>int</I>
     <B>setlinebuf</B>(<I>FILE</I> <I>*stream</I>)

     <I>int</I>
     <B>setvbuf</B>(<I>FILE</I> <I>*stream</I>, <I>char</I> <I>*buf</I>, <I>int</I> <I>mode</I>, <I>size</I><B>_</B><I>t</I> <I>size</I>)


</PRE>
<H2>DESCRIPTION</H2><PRE>
     The three types of buffering available are unbuffered, block buffered,
     and line buffered.  When an output stream is unbuffered, information ap-
     pears on the destination file or terminal as soon as written; when it is
     block buffered many characters are saved up and written as a block; when
     it is line buffered characters are saved up until a newline is output or
     input is read from any stream attached to a terminal device (typically
     stdin).  The function <B><A HREF="fflush.html">fflush(3)</A></B> may be used to force the block out early.
     (See <B><A HREF="fclose.html">fclose(3)</A></B>.)

     Normally all files are block buffered.  When the first I/O operation oc-
     curs on a file, <B><A HREF="malloc.html">malloc(3)</A></B> is called, and an optimally-sized buffer is ob-
     tained.  If a stream refers to a terminal (as <I>stdout</I> normally does) it is
     line buffered.  The standard error stream <I>stderr</I> is always unbuffered.

     The <B>setvbuf</B>() function may be used to alter the buffering behavior of a
     stream.  The <I>mode</I> parameter must be one of the following three macros:

	   _IONBF  unbuffered

	   _IOLBF  line buffered

	   _IOFBF  fully buffered

     The <I>size</I> parameter may be given as zero to obtain deferred optimal-size
     buffer allocation as usual.  If it is not zero, then except for un-
     buffered files, the <I>buf</I> argument should point to a buffer at least <I>size</I>
     bytes long; this buffer will be used instead of the current buffer.  (If
     the <I>size</I> argument is not zero but <I>buf</I> is NULL, a buffer of the given size
     will be allocated immediately, and released on close.  This is an exten-
     sion to ANSI C; portable code should use a size of 0 with any NULL
     buffer.)

     The <B>setvbuf</B>() function may be used at any time, but may have peculiar
     side effects (such as discarding input or flushing output) if the stream
     is ``active''.  Portable applications should call it only once on any
     given stream, and before any I/O is performed.

     The other three calls are, in effect, simply aliases for calls to
     <B>setvbuf</B>().  Except for the lack of a return value, the <B>setbuf</B>() function
     is exactly equivalent to the call

	   setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);

     The <B>setbuffer</B>() function is the same, except that the size of the buffer
     is up to the caller, rather than being determined by the default BUFSIZ.
     The <B>setlinebuf</B>() function is exactly equivalent to the call:

	   setvbuf(stream, (char *)NULL, _IOLBF, 0);


</PRE>
<H2>RETURN VALUES</H2><PRE>
     The <B>setvbuf</B>() function returns 0 on success, or EOF if the request cannot
     be honored (note that the stream is still functional in this case).

     The <B>setlinebuf</B>() function returns what the equivalent <B>setvbuf</B>() would
     have returned.


</PRE>
<H2>SEE ALSO</H2><PRE>
     <B><A HREF="fclose.html">fclose(3)</A></B>,  <B><A HREF="fopen.html">fopen(3)</A></B>,  <B><A HREF="fread.html">fread(3)</A></B>,  <B><A HREF="malloc.html">malloc(3)</A></B>,  <B><A HREF="printf.html">printf(3)</A></B>,  <B><A HREF="fputs.html">puts(3)</A></B>


</PRE>
<H2>STANDARDS</H2><PRE>
     The <B>setbuf</B>() and <B>setvbuf</B>() functions conform to ISO 9899: 1990 (``ISO
     C'').


</PRE>
<H2>BUGS</H2><PRE>
     The <B>setbuffer</B>() and <B>setlinebuf</B>() functions are not portable to versions
     of BSD UNIX before 4.2BSD. On 4.2BSD and 4.3BSD systems, <B>setbuf</B>() always
     uses a suboptimal buffer size and should be avoided.

4th Berkeley Distribution	 June 4, 1993				     2
</PRE>
<HR>
<ADDRESS>
Man(1) output converted with
<a href="http://www.oac.uci.edu/indiv/ehood/man2html.html">man2html</a>
</ADDRESS>
</BODY>
</HTML>
